/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package util.Datas;

import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 *
 * @author cleiton
 */
public class Datas {


    /**Configura data para quanquer dia
     * @param dia
     * @param mes
     * @param ano
     * @return data configurada
     */
    public Date configurarData(int dia, int mes, int ano) {
        Calendar calendar= Calendar.getInstance();
        calendar.set(ano, mes, dia);
    	Date date = calendar.getTime();
        return date;
    }

    /**Configura data para o inicio da Semana
     * @param date
     * @return retorna para o inicio da Semana
     */
    public Date configurarInicioSemana(Date date) {
        Calendar calendar = Calendar.getInstance();
        calendar.setFirstDayOfWeek(Calendar.SUNDAY);
        calendar.set(Calendar.DAY_OF_WEEK, Calendar.SUNDAY);
        System.out.println();
        date = calendar.getTime();
        return date;
    }

    /** Configura data para o inicio do mês
     * @param date
     * @return data configutrada
     */
    public Date configurarInicioMes(Date date) {
    	Calendar calendar=Calendar.getInstance();
    	calendar.setTime(date);
        calendar.set(Calendar.DATE, 1);
        return calendar.getTime();
    }

    public ArrayList<Integer> splitDate(String date, String dateAte) throws ExceptionDate, DatasMenorErrado {
        if (this.isDateValida(date)) {

            if (!this.isDateValida(dateAte)) {
                throw new ExceptionDate("Segunda Data não esta Correta");
            }

        } else {
            throw new ExceptionDate("Primeira Data não esta Correta");
        }

        ArrayList<Integer> dates = new ArrayList<Integer>();
        dates.addAll(splitDate(date));
        dates.addAll(splitDate(dateAte));
        System.out.println(dates);
        Date configurarData = this.configurarData(dates.get(0)-1 , dates.get(1)-1 , dates.get(2));
        System.out.println(configurarData);
        Date configurarData1 = this.configurarData(dates.get(3)-1 , dates.get(4)-1 , dates.get(5));
        System.out.println(configurarData1);
       /* if (!configurarData.before(configurarData1)) {
            throw new DatasMenorErrado("Primeira Data Maior que a Segunda.");
        }*/
        if(configurarData.compareTo(configurarData1)>0){
             throw new DatasMenorErrado("Primeira Data Maior que a Segunda.");
        }
        return dates;
    }

    public ArrayList<Integer> splitDate(String date) {
        String[] split = date.split("/");
        ArrayList<Integer> dates = new ArrayList<Integer>();
        dates.add(Integer.parseInt(split[0]));
        dates.add(Integer.parseInt(split[1]));
        dates.add(Integer.parseInt(split[2]));
        return dates;
    }

    public boolean isDateValida(String inDate) {
        Pattern p = Pattern.compile("^(?:(?:31(\\/|-|\\.)(?:0?[13578]|1[02]))\\1|(?:(?:29|30)(\\/|-|\\.)(?:0?[1,3-9]|1[0-2])\\2))(?:(?:1[6-9]|[2-9]\\d)?\\d{2})$|^(?:29(\\/|-|\\.)0?2\\3(?:(?:(?:1[6-9]|[2-9]\\d)?(?:0[48]|[2468][048]|[13579][26])|(?:(?:16|[2468][048]|[3579][26])00))))$|^(?:0?[1-9]|1\\d|2[0-8])(\\/|-|\\.)(?:(?:0?[1-9])|(?:1[0-2]))\\4(?:(?:1[6-9]|[2-9]\\d)?\\d{2})$");
        Matcher m = p.matcher(inDate);
        if (!m.find()) {
            return false;
        }
        return true;
    }
}
